package com.simulation.web.mapper;

import com.simulation.web.domain.TechPost;
import com.simulation.web.dto.TechPostDTO;
import com.simulation.web.vo.TechPostVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface PostMapper {

	List<TechPostVO> getPage(@Param("techPostDTO") TechPostDTO techPostDTO, @Param("statusList") List<String> statusList);

	/**
     * 查询所有记录
     *
     * @return 返回集合，没有返回空List
     */
	List<TechPostVO> listAll();


	/**
     * 根据主键查询
     *
     * @param id 主键
     * @return 返回记录，没有返回null
     */
	TechPostVO getById(Long id);
	
	/**
     * 新增，插入所有字段
     *
     * @param techPost 新增的记录
     * @return 返回影响行数
     */
	int insert(TechPost techPost);
	
	/**
     * 新增，忽略null字段
     *
     * @param techPost 新增的记录
     * @return 返回影响行数
     */
	int insertIgnoreNull(TechPost techPost);
	
	/**
     * 修改，修改所有字段
     *
     * @param techPost 修改的记录
     * @return 返回影响行数
     */
	int update(TechPost techPost);
	
	/**
     * 修改，忽略null字段
     *
     * @param techPost 修改的记录
     * @return 返回影响行数
     */
	int updateIgnoreNull(TechPost techPost);
	
	/**
     * 删除记录
     *
     * @param id 待删除的记录
     * @return 返回影响行数
     */
	int delete(@Param("id") Long id);

	/**
	 * 获取用户关注的项目
	 * @param userId
	 * @return
	 */
	List<TechPost> getPostByUserFocused(@Param("userId") long userId);

	/**
	 * 获取用户点赞的项目
	 * @param userId
	 * @param userId
	 * @return
	 */
	List<TechPost> getPostByUserLikes(@Param("userId") long userId);

	List<TechPostVO> getPostByCollectionId(@Param("collectionId") long collectionId);

	/**
	 * 查询排行榜
	 * @return
	 */
	List<TechPostVO> selectViewCount();


	/**
	 * 查询排行榜
	 * @return
	 */
	List<TechPostVO> selectFavoriteCount();

	/**
	 * 用户ID
	 * @param userId
	 * @return
	 */
	List<TechPostVO> selectFollowCount(Long userId);

	int isCopy(@Param("userId") Long userId, @Param("source") Long source);


	List<TechPostVO> getByIdList(@Param("idList") List<Long> idList);

	/**
	 * 更新项目空间
	 * @param workspaceId
	 * @param id
	 * @return
	 */
	int updateWorkspace(@Param("workspaceId") String workspaceId, @Param("id") Long id, @Param("code") String code,@Param("environment") String environment);
}